<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			// var p=new Promise((resolve,reject)=>{
			// 	if(true){
			// 		resolve("成功")
			// 	}else{
			// 		reject("失败")
			// 	}
			// })
			// p.then((resolve,reject)=>{
			// 	console.log(resolve)
			// })


			class NewP {
				constructor(fn) {
					//声明两个数组存放成功执行事件
					this.arrSu = []; //成功
					this.arrErr = []; //失败
					this.state = "进行中"; //状态
					fn(this.resolvefn.bind(this))
					//成功执行的函数,res是成功的参数
				}
				
				//两个参数是成功、失败
				then(successFn) {
					console.log("进入then")
					if (typeof successFn == "function") {
						console.log("把成功的事件存放道一个数组中")
						this.arrSu.push(successFn)
						console.log("打印成功数据："+successFn)//.then请求到的
					}
				
					if (typeof reject == "function") {
						this.arrErr.push(reject)
					}
				}
				resolvefn(res) {
					//成功了
					console.log("执行成功的函数，把每一个成功的item遍历输出")
					this.state = "成功"
					
					this.arrSu.forEach((item) => {
						console.log(res)
						
						console.log(item)//这个时候还没有成功的数据，所以继续往下走
						item(res); //遍历每一个成功的函数
					})
				}
				
				//失败抛出异常
				catch (failFn) {
					if (typeof failFn == 'function') {
						this.arrErr.push(failFn)
					}
				}
			
			}


			var p1 = new NewP(function fn(resolve,reject){
				setTimeout(()=>{//等待获取获取数据
					if (true) {
						resolve("我是成功的数据")
					} else {
						reject("我是失败的数据")
					}
				},2000)
				
			})
			p1.then((res) => {
				console.log("输出请求成功结果："+res)
			})
			//catch
			p1.catch(function(err){
				console.log("catch:",err)
			})
		</script>
	</body>
</html>
